Many phases of modern electronic design are performed with computer aided design (CAD) tools or electronic design automation (EDA) systems. To design an integrated circuit, a designer first creates high level behavior descriptions of the IC device using a high-level hardware design language (HDL). Common examples of HDLs include Verilog and VHDL.
An EDA system typically receives the high level behavior descriptions of the IC device and translates this high-level design language into netlists of various levels of abstraction using a computer synthesis process. A netlist describes interconnections of nodes and components on the chip and includes information of circuit primitives such as transistors and diodes, their sizes and interconnections, for example.
An integrated circuit designer may use a set of layout EDA application programs to create a physical integrated circuit design layout from a logical circuit design. The layout EDA application uses geometric shapes of different materials to create the various electrical components on an integrated circuit and to represent electronic and circuit IC components as geometric objects with varying shapes and sizes.
Verification is performed at several stages to ensure that the electronic circuit design will work for its intended purpose. After an integrated circuit designer has created an initial integrated circuit design, the integrated circuit designer then tests and optimizes the integrated circuit layout using a set of EDA testing and analysis tools. At the logical level, simulation and formal verification are used to test the IC design. At the physical implementation level, common testing and optimization steps include extraction, verification, and compaction. The steps of extraction and verification are performed to ensure that the integrated circuit layout will perform as desired. The test of extraction is the process of analyzing the geometric layout and material composition of an integrated circuit layout in order to “extract” the electrical characteristics of the designed integrated circuit layout. The step of verification uses the extracted electrical characteristics to analyze the circuit design using circuit analysis tools.
As the quantity of data in modern IC designs become larger and larger over time, it has become apparent that conventional EDA tools are unable to effectively and efficiently scale upwards to handle very large electronic designs, such as many modern microprocessor, SOC, and systems designs. For example, the ability of conventional verification tools to handle simulation or formal verification is incompatible with many modern IC designs being produced by electronics companies that are constantly increasing in complexity and number of transistors. The basic problem is that conventional simulation and formal verification tools are designed to handle much smaller sets of data than exists for modern designs. This problem is exacerbated for all EDA tools by greatly increased functionality and feature sets for modern IC chips as well as constantly improving IC manufacturing technologies that can create IC chips at ever-smaller feature sizes, which allow increasingly greater quantities of transistors and other objects to be placed within the same chip area.
Organizations that design very large circuits may attempt to address these problems by using simulation or formal verification only at certain specified levels of the design, and not the entire design, so that the quantity of data sought to be verified is within the appropriate range for conventional EDA tools. The problem with this approach is that the entirety of the design may not be adequately verified, and it is ineffective for identifying all problems with the design. Moreover, this approach may result in design flaws being found much later in the design cycle and even after market/production release of the product. As is well known in industry, the cost of fixing a design problem tends to significantly increase the further along the product is on the design cycle.
One approach to address these problems is to create specialized “ad hoc” models of the design at different levels, e.g., using C-based model to represent RTL. In this approach, the ad hoc designs would be tested and verified along with the RTL. There are many problems with this alternate approach. For example, the alternate approach fails to provide a consistent relationship across different abstraction levels. In other words, this approach has no relationship between the different levels other than at a conceptual level. There is a very large gap between what is determined at one level versus what actually happens at another level. Because of this, this approach requires the verification and correction process at the different levels to be repeated over and over again, often without any assurance that the design problems at a given level are truly being identified.
Transaction based verification is another approach for attempting to address the same problems. With transaction based verification, low level signal activities are grouped together into common “transactions”. This is a notable attempt to act upon a circuit design at different levels of abstraction and is becoming more and more prevalent in the EDA product and technology space. The problem with conventional transaction based verification tools is that there is no guarantee of relationship between the different abstraction levels. In other words, there is no airtight guarantee that no errors identified at the transaction level will translate into no errors at the signal level, and vice versa.
These problems become even more difficult when viewed in the context of hardware/software co-design. Many electronic systems, whether self-contained or embedded, include both a hardware platform and associated software that run with or on the hardware platform. Hardware/software co-design refers to the process of concurrently forming designs for the hardware and software components of an electronic system.
The process of performing hardware/software co-design is considered very challenging for many designers, since it normally requires a multi-disciplinary approach to systems design that must take into account complex effects throughout the different parts of the system. The design of embedded software and systems is particularly seen as a tricky exercise, often needing to consider many acute constraints for a successful design, such as energy consumption, memory space, criticality and safety considerations, and execution time. With many modern systems designs becoming more and more complex, these constraints are causing greater and greater difficulties for the co-design process.